SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[SP_TCDOCU_ALMA_Q02]
/*--------------------------------------------------------*/  
/*---Empresa               OFISIS S.A.                 --*/  
/*---PROVnte               CELIMA         --*/  
/*---Sistema               Tesoreria                   --*/  
/*---M¸dulo                Empresa                     --*/  
/*---Programa              VALIDACION DE ALMACENES     --*/  
/*---Script                SP_TCDOCU_ALMA_Q01.sql      --*/  
/*---Nombre SP             SP_TCDOCU_ALMA_Q01          --*/  
/*---Desarrollado por      Reynaldo Menacho Luyo       --*/  
/*---Fecha Creaci¸n        01/03/2004                  --*/  
/*---Base Datos            SQL SERVER           --*/  
/*---Versi¸n               2000                         --*/  
/*---Invoca a SP                                       --*/  
/*--------------------------------------------------------*/  
  
/*-------------------------------------------------------*/  

/*-------------------------------------------------------*/  
/*---Modificado 1 por     :--*/  
/*---Fecha Modificaci®n   :--*/   
/*---Detalle Modificaci®n :--*/  
/*-------------------------------------------------------*/  
/*-------------------------------------------------------*/  
/*---Drop Proc SP_TMDOCP_GENE_Q31                      --*/  
/*---Grant Execute on SP_TCDOCU_ALMA_Q01 to public         --*/   
/*---  SP_TCDOCU_ALMA_Q01 "Where TCDOCU_ALMA.CO_EMPR in ( '01') And TCDOCU_ALMA.CO_ALMA in ( '001','002','003','004','005','006','007') And TCDOCU_ALMA.CO_EMPR =  T8.CO_EMPR
And T8.CO_GRUP = T9.CO_GRUP
And T9.CO_USUA =  'RMENA'", '', 2004, 2, 'DOL', 'N', 0  --*/  
/*-------------------------------------------------------*/  
  
@ISCA_WHER_0001 VARCHAR(255),  
@ISCA_WHER_0002 VARCHAR(255),  
@INNU_ANNO TD_IN_001,  
@INNU_MESE TD_IN_001,  
@ISCO_MONE_PRES TD_VC_003,  
@ISST_USUA TD_VC_001,  
@INFA_USUA TD_NU_009_004  
AS  
  
 CREATE TABLE #TWDOCU_ALMA_Q01_1   
 ( CO_EMPR      varchar(3) NULL,
   CO_ALMA	varchar(3)  NULL,
   FE_DOCU	datetime NULL,
   TI_DOCU	varchar(3)  NULL,
   NU_DOCU	varchar(20)  NULL,
   CO_MONE_LOGI	varchar(3) NULL,
   FA_CAMB_LOGI numeric(9,4) DEFAULT 0,
   IM_ORIG_LOGI numeric(16,4) DEFAULT 0,
   IM_CONV_LOGI numeric(16,4) DEFAULT 0,

   FE_REGI_COMP datetime NULL,
   CO_TIPO_DOCU	varchar(3)  NULL,
   NU_DOCU_PROV	varchar(20)  NULL,
   NU_CORR_COMP varchar(20)  NULL,  
   CO_MONE_TESO	varchar(3) NULL,
   FA_CAMB_TESO numeric(9,4) DEFAULT 0,
   FA_CAMB_EXTR numeric(9,4) DEFAULT 0 NULL,
   IM_ORIG_TESO numeric(16,4) DEFAULT 0,  
   IM_CONV_TESO numeric(16,4) DEFAULT 0,  

   TI_DETA varchar(1) NULL)  

 CREATE TABLE #TWDOCU_ALMA_Q01_2
 ( CO_EMPR      varchar(3) NULL,
   CO_PROV	varchar(20)  NULL,
   CO_TIPO_DOCU	varchar(3)  NULL,
   NU_DOCU_PROV	varchar(20)  NULL,
   FE_REGI_COMP datetime NULL,
   NU_CORR_COMP varchar(20)  NULL,  
   CO_MONE	varchar(3) NULL,
   FA_TIPO_CAMB numeric(9,4) DEFAULT 0,
   FA_CAMB_EXTR numeric(9,4) DEFAULT 0 NULL,
   IM_ORIG_TESO numeric(16,4) DEFAULT 0,
   IM_CONV_LOGI numeric(16,4) DEFAULT 0,
   TI_DETA	varchar(1) NULL)  


DECLARE   
  
@VSTI_CAMB TD_VC_001,  
@VSTI_ORIG TD_VC_001,  
@VSDE_ORDE TD_VC_050,  
@VSNU_ANNO TD_VC_004,  
@VSNU_MESE TD_VC_002,  
@VNIM_CXPA_CONV TD_NU_016_004,  
@VNIM_PAGO_CONV TD_NU_016_004,  
@VNFE_0001      TD_IN_001

SELECT  @VSNU_ANNO = Convert(Varchar(4), @INNU_ANNO), 
	@VSNU_MESE = Convert(Varchar(2), @INNU_MESE)

--Inserto todos los documentos que tienen una sola guia de ingreso asociada
  Insert Into #TWDOCU_ALMA_Q01_2 (CO_EMPR, CO_PROV, CO_TIPO_DOCU, NU_DOCU_PROV, FE_REGI_COMP,
  CO_MONE, FA_TIPO_CAMB, FA_CAMB_EXTR, IM_ORIG_TESO, IM_CONV_LOGI, TI_DETA)
  Select T1.CO_EMPR, T1.CO_PROV, T1.CO_TIPO_DOCU,  T1.NU_DOCU_PROV, T1.FE_REGI_COMP, 
  T1.CO_MONE, T1.FA_TIPO_CAMB, T1.FA_CAMB_EXTR, T1.IM_BRUT_AFEC, T2.IM_CONV, '1'
  From TMDOCU_PROV T1, ( Select CO_EMPR, CO_PROV, CO_TIPO_DOCU, NU_DOCU_PROV, Max(IM_CONV) IM_CONV, Max(NU_CORR) NU_CORR
			From TDORDE_FACT
			Group By CO_EMPR, CO_PROV, CO_TIPO_DOCU, NU_DOCU_PROV
			Having Max(NU_CORR) = 1 ) T2
  Where T1.CO_EMPR = T2.CO_EMPR
  And T1.CO_PROV = T2.CO_PROV
  And T1.CO_TIPO_DOCU = T2.CO_TIPO_DOCU
  And T1.NU_DOCU_PROV = T2.NU_DOCU_PROV
  And Year(FE_REGI_COMP) = @INNU_ANNO
  And Month(FE_REGI_COMP) = @INNU_MESE
  And T1.CO_ESTA_DOCU != 'ANU'


--Inserto todos los documentos que tienen una sola guia de ingreso asociada
  Insert Into #TWDOCU_ALMA_Q01_2 (CO_EMPR, CO_PROV, CO_TIPO_DOCU, NU_DOCU_PROV, FE_REGI_COMP,
  CO_MONE, FA_TIPO_CAMB, FA_CAMB_EXTR, IM_ORIG_TESO, IM_CONV_LOGI, TI_DETA)
  Select T1.CO_EMPR, T1.CO_PROV, T1.CO_TIPO_DOCU,  T1.NU_DOCU_PROV, T1.FE_REGI_COMP, 
  T1.CO_MONE, T1.FA_TIPO_CAMB, T1.FA_CAMB_EXTR, T1.IM_BRUT_AFEC, T2.IM_CONV, '2'
  From TMDOCU_PROV T1, ( Select CO_EMPR, CO_PROV, CO_TIPO_DOCU, NU_DOCU_PROV, Sum(IM_CONV) IM_CONV, Max(NU_CORR) NU_CORR
			From TDORDE_FACT
			Group By CO_EMPR, CO_PROV, CO_TIPO_DOCU, NU_DOCU_PROV
			Having Max(NU_CORR) > 1 ) T2
  Where T1.CO_EMPR = T2.CO_EMPR
  And T1.CO_PROV = T2.CO_PROV
  And T1.CO_TIPO_DOCU = T2.CO_TIPO_DOCU
  And T1.NU_DOCU_PROV = T2.NU_DOCU_PROV
  And Year(FE_REGI_COMP) = @INNU_ANNO
  And Month(FE_REGI_COMP) = @INNU_MESE
  And T1.CO_ESTA_DOCU != 'ANU'

SELECT * FROM #TWDOCU_ALMA_Q01_2

  Execute( '
  Insert Into #TWDOCU_ALMA_Q01_1 (CO_EMPR, CO_ALMA, FE_DOCU, TI_DOCU, NU_DOCU, 
	CO_MONE_LOGI, FA_CAMB_LOGI, IM_ORIG_LOGI, CO_TIPO_DOCU, NU_DOCU_PROV, NU_CORR_COMP, CO_MONE_TESO,
	IM_ORIG_TESO, FA_CAMB_TESO, FA_CAMB_EXTR, FE_REGI_COMP, TI_DETA)
  Select TCDOCU_ALMA.CO_EMPR, TCDOCU_ALMA.CO_ALMA, Max(TCDOCU_ALMA.FE_DOCU), TCDOCU_ALMA.TI_DOCU, TCDOCU_ALMA.NU_DOCU, 
	"SOL", Max(T2.FA_CAMB), Sum(Round(T2.CA_DOCU_ALMA * T2.IM_COST_ALMA, 4)), 
	Max(T4.CO_TIPO_DOCU), Max(T4.NU_DOCU_PROV), Max(T4.NU_CORR_COMP), Max(T4.CO_MONE), 
	Max(T4.IM_ORIG_TESO), Max(T4.FA_TIPO_CAMB), Max(T4.FA_CAMB_EXTR), Max(T4.FE_REGI_COMP), "1"
  From TCDOCU_ALMA, TDDOCU_ALMA T2, TDORDE_FACT T3, #TWDOCU_ALMA_Q01_2 T4, TREMPR_GRUP T8, TMUSUA T9 ' + @ISCA_WHER_0001 + @ISCA_WHER_0002 + ' 
	And TCDOCU_ALMA.NU_DOCU = T2.NU_DOCU
	And TCDOCU_ALMA.TI_DOCU = T2.TI_DOCU
	And TCDOCU_ALMA.CO_ALMA = T2.CO_ALMA
	And TCDOCU_ALMA.CO_UNID = T2.CO_UNID
	And TCDOCU_ALMA.CO_EMPR = T2.CO_EMPR
	And TCDOCU_ALMA.TI_SITU = "ACT"
	And T2.TI_SITU = "ACT"
	And ( Year(TCDOCU_ALMA.FE_DOCU) <= ' + @VSNU_ANNO + '
	      Or ( Year(TCDOCU_ALMA.FE_DOCU) = ' + @VSNU_ANNO + ' And Month(TCDOCU_ALMA.FE_DOCU) <= ' + @VSNU_MESE + ' ))
	And TCDOCU_ALMA.CO_EMPR = T3.CO_EMPR
	And TCDOCU_ALMA.TI_DOCU = T3.TI_DOCU_GUIN
	And TCDOCU_ALMA.NU_DOCU = T3.NU_DOCU_GUIN
	And T3.CO_EMPR = T4.CO_EMPR
	And T3.CO_PROV = T4.CO_PROV
	And T3.CO_TIPO_DOCU = T4.CO_TIPO_DOCU
	And T3.NU_DOCU_PROV = T4.NU_DOCU_PROV
	And T4.TI_DETA = "1"
	Group By TCDOCU_ALMA.TI_DOCU, TCDOCU_ALMA.NU_DOCU, TCDOCU_ALMA.CO_ALMA, TCDOCU_ALMA.CO_UNID, TCDOCU_ALMA.CO_EMPR ')


  Execute( '
  Insert Into #TWDOCU_ALMA_Q01_1 (CO_EMPR, CO_ALMA, FE_DOCU, TI_DOCU, NU_DOCU, 
	CO_MONE_LOGI, FA_CAMB_LOGI, IM_ORIG_LOGI, CO_TIPO_DOCU, NU_DOCU_PROV, NU_CORR_COMP, CO_MONE_TESO,
	IM_ORIG_TESO, FA_CAMB_TESO, FA_CAMB_EXTR, FE_REGI_COMP, TI_DETA)
  Select TCDOCU_ALMA.CO_EMPR, TCDOCU_ALMA.CO_ALMA, Max(TCDOCU_ALMA.FE_DOCU), TCDOCU_ALMA.TI_DOCU, TCDOCU_ALMA.NU_DOCU, 
	"SOL", Max(T2.FA_CAMB), Sum(Round(T2.CA_DOCU_ALMA * T2.IM_COST_ALMA, 4)), 

	Max(T4.CO_TIPO_DOCU), Max(T4.NU_DOCU_PROV), Max(T4.NU_CORR_COMP), Max(T4.CO_MONE), 
	Max(T3.IM_CONV) + (Max(T3.IM_CONV) / Max(T4.IM_CONV_LOGI)) * 
	(Max(T4.IM_ORIG_TESO) - Max(T4.IM_CONV_LOGI)), Max(T4.FA_TIPO_CAMB), Max(T4.FA_CAMB_EXTR), Max(T4.FE_REGI_COMP), "1"
  From TCDOCU_ALMA, TDDOCU_ALMA T2, TDORDE_FACT T3, #TWDOCU_ALMA_Q01_2 T4, TREMPR_GRUP T8, TMUSUA T9 ' + @ISCA_WHER_0001 + @ISCA_WHER_0002 + ' 
	And TCDOCU_ALMA.NU_DOCU = T2.NU_DOCU
	And TCDOCU_ALMA.TI_DOCU = T2.TI_DOCU
	And TCDOCU_ALMA.CO_ALMA = T2.CO_ALMA
	And TCDOCU_ALMA.CO_UNID = T2.CO_UNID
	And TCDOCU_ALMA.CO_EMPR = T2.CO_EMPR
	And TCDOCU_ALMA.TI_SITU = "ACT"
	And T2.TI_SITU = "ACT"
	And ( Year(TCDOCU_ALMA.FE_DOCU) <= ' + @VSNU_ANNO + '
	      Or ( Year(TCDOCU_ALMA.FE_DOCU) = ' + @VSNU_ANNO + ' And Month(TCDOCU_ALMA.FE_DOCU) <= ' + @VSNU_MESE + ' ))
	And TCDOCU_ALMA.CO_EMPR = T3.CO_EMPR
	And TCDOCU_ALMA.TI_DOCU = T3.TI_DOCU_GUIN
	And TCDOCU_ALMA.NU_DOCU = T3.NU_DOCU_GUIN
	And T3.CO_EMPR = T4.CO_EMPR
	And T3.CO_PROV = T4.CO_PROV
	And T3.CO_TIPO_DOCU = T4.CO_TIPO_DOCU
	And T3.NU_DOCU_PROV = T4.NU_DOCU_PROV
	And T4.TI_DETA = "2"
	Group By TCDOCU_ALMA.TI_DOCU, TCDOCU_ALMA.NU_DOCU, TCDOCU_ALMA.CO_ALMA, TCDOCU_ALMA.CO_UNID, TCDOCU_ALMA.CO_EMPR ')


  Execute( '
  Insert Into #TWDOCU_ALMA_Q01_1 (CO_EMPR, CO_ALMA, FE_DOCU, TI_DOCU, NU_DOCU, 
	CO_MONE_LOGI, FA_CAMB_LOGI, IM_ORIG_LOGI, CO_TIPO_DOCU, NU_DOCU_PROV, NU_CORR_COMP, CO_MONE_TESO,
	IM_ORIG_TESO, TI_DETA)
  Select TCDOCU_ALMA.CO_EMPR, TCDOCU_ALMA.CO_ALMA, Max(TCDOCU_ALMA.FE_DOCU), TCDOCU_ALMA.TI_DOCU, TCDOCU_ALMA.NU_DOCU, 
	"SOL", Max(T2.FA_CAMB), Sum(Round(T2.CA_DOCU_ALMA * T2.IM_COST_ALMA, 4)), 
	Null, Null, Null, Null, 0, "2"
  From TCDOCU_ALMA, TDDOCU_ALMA T2, TCORDE_COMP T3, TTTIOP_LOGI T4, TREMPR_GRUP T8, TMUSUA T9 ' + @ISCA_WHER_0001 + @ISCA_WHER_0002 + ' 
  	And TCDOCU_ALMA.NU_DOCU = T2.NU_DOCU
	And TCDOCU_ALMA.TI_DOCU = T2.TI_DOCU
	And TCDOCU_ALMA.CO_ALMA = T2.CO_ALMA
	And TCDOCU_ALMA.CO_UNID = T2.CO_UNID
	And TCDOCU_ALMA.CO_EMPR = T2.CO_EMPR
	And TCDOCU_ALMA.TI_SITU = "ACT"
	And T2.TI_SITU = "ACT"
	And Year(TCDOCU_ALMA.FE_DOCU) = ' + @VSNU_ANNO + '
	And Month(TCDOCU_ALMA.FE_DOCU) = ' + @VSNU_MESE + '
	And TCDOCU_ALMA.NU_ORCO = T3.NU_ORCO
	And TCDOCU_ALMA.CO_EMPR = T3.CO_EMPR
	And TCDOCU_ALMA.TI_OPER = T4.TI_OPER
	And TCDOCU_ALMA.CO_EMPR = T4.CO_EMPR
	And T4.ST_ORCO = "S"
	And Not Exists (Select T3.NU_DOCU_GUIN
			From TDORDE_FACT T3, #TWDOCU_ALMA_Q01_2 T4
			Where TCDOCU_ALMA.CO_EMPR = T3.CO_EMPR
			And TCDOCU_ALMA.TI_DOCU = T3.TI_DOCU_GUIN
			And TCDOCU_ALMA.NU_DOCU = T3.NU_DOCU_GUIN
			And T3.CO_EMPR = T4.CO_EMPR
			And T3.CO_PROV = T4.CO_PROV
			And T3.CO_TIPO_DOCU = T4.CO_TIPO_DOCU
			And T3.NU_DOCU_PROV = T4.NU_DOCU_PROV)

  Group By TCDOCU_ALMA.TI_DOCU, TCDOCU_ALMA.NU_DOCU, TCDOCU_ALMA.CO_ALMA, TCDOCU_ALMA.CO_UNID, TCDOCU_ALMA.CO_EMPR ')
  
  
------------------------------------------------------------------  
----- CONVIERTO LOS IMPORTES A LA MONEDA DE PRESENTACION  
------------------------------------------------------------------  
  
IF @ISST_USUA = 'S'  
  UPDATE #TWDOCU_ALMA_Q01_1  
  SET IM_CONV_LOGI = (SELECT Dbo.FN_TCFACT_CAMB_Q02(T1.CO_MONE_LOGI, @ISCO_MONE_PRES, T1.FE_DOCU,   
		      T1.IM_ORIG_LOGI, T2.TI_CAMB, T2.TI_ORIG, 'S', T2.CO_MONE_DEFA, T2.CO_MONE_EXTR, @INFA_USUA)),  
      IM_CONV_TESO = (SELECT Dbo.FN_TCFACT_CAMB_Q02(T1.CO_MONE_TESO, @ISCO_MONE_PRES, T1.FE_REGI_COMP,   
		      T1.IM_ORIG_TESO, T2.TI_CAMB, T2.TI_ORIG, 'S', T2.CO_MONE_DEFA, T2.CO_MONE_EXTR, @INFA_USUA))  
  FROM #TWDOCU_ALMA_Q01_1 T1, TMPARA_TESO T2  
  WHERE T1.CO_EMPR = T2.CO_EMPR  
ELSE  
  UPDATE #TWDOCU_ALMA_Q01_1  
  SET IM_CONV_LOGI = Isnull( (SELECT Dbo.FN_TCFACT_CAMB_Q02(T1.CO_MONE_LOGI, @ISCO_MONE_PRES, T1.FE_DOCU,   
		      T1.IM_ORIG_LOGI, T2.TI_CAMB, T2.TI_ORIG, 'S', T2.CO_MONE_DEFA, T2.CO_MONE_EXTR, T1.FA_CAMB_LOGI)), 0),  
      IM_CONV_TESO = Isnull( (SELECT Dbo.FN_TCFACT_CAMB_Q02(T1.CO_MONE_TESO, @ISCO_MONE_PRES, T1.FE_REGI_COMP,   
		      T1.IM_ORIG_TESO, T2.TI_CAMB, T2.TI_ORIG, 'S', T2.CO_MONE_DEFA, T2.CO_MONE_EXTR, T1.FA_CAMB_TESO)), 0)
  FROM #TWDOCU_ALMA_Q01_1 T1, TMPARA_TESO T2  
  WHERE T1.CO_EMPR = T2.CO_EMPR  
  

Select T1.CO_EMPR, T6.DE_NOMB, T1.CO_ALMA, T5.DE_ALMA, Convert(Varchar(10), T1.FE_DOCU, 103), T1.TI_DOCU, T1.NU_DOCU,
	T1.CO_MONE_LOGI, T1.IM_ORIG_LOGI, Round(T1.IM_CONV_LOGI, 2), T1.CO_TIPO_DOCU, T1.NU_DOCU_PROV, 
	T1.NU_CORR_COMP, T1.CO_MONE_TESO, T1.IM_ORIG_TESO, Round(T1.IM_CONV_TESO, 2), Round(T1.IM_CONV_TESO, 2) - Round(T1.IM_CONV_LOGI, 2), 
	T1.FE_DOCU, T1.TI_DETA
From #TWDOCU_ALMA_Q01_1 T1, TMALMA T5, TMEMPR T6
Where T1.CO_EMPR = T5.CO_EMPR
And T1.CO_ALMA = T5.CO_ALMA
And T1.CO_EMPR = T6.CO_EMPR
Order By 1, 3, 19, 18
  
  
RETURN  
/*------------------------- FIN ------------------------------ */


GO
